今天我們終於要建構的一個類神經網路,這一個類神經網路被稱為多層感知分類器(Multiple Layer Perceptron),是對應的一開始所介紹的感知器(perceptron)而取的名字,但實際上,兩者除了使用具有激發功能的神經元外,並沒有太大的關係。
類神經網路的架構中,多層感知分類器,是屬於 Feed Forward 網路的一種。 Feed Forward 類神經網路,每一層中可包含許多各自獨立的神經元,這些位於同一層的神經元彼此之間並沒有任何連結,但對位於上下兩層的每一個神經元,都有相對的連結。也就是,下層的每一個神經元,對上層的每一個神經元,都會學習到一個權重值,來表達上下兩層神經元連結的強度。這個連結的強度,對於分類任務而言,可能是屬於某一類別的獨有特徵。
因為 Feed Forward 類神經網路中,上下兩層之間中的神經元具有全連結性質,所以這樣的網路有經常被稱為 Fully connected layer,相對於,影像識別中經常使用的卷積類神經網路中的卷積層(convolution layer),Feed Forward layer 中的連結分佈更為緊密,所以又常被稱為 Dense layer。關於卷積類神經網路和 Feed Forward 類神經網路的差別,會在往後的文章中更深入的討論。
利用 tensorflow 的 estimator/data API 去建構一個 Feed Forward 類神經網路,說使用的方法和之前所提的線性邏輯分類器(Logistic regression) 非常類似, 唯一的不同在於說使用的分類器 類別。在這裡我們使用的是 DNNClassifier 類別物件,具有一個包含1000 個神經元的 hidden layer 的 DNNClassifier 可以由以下的原始碼來建構出:
classifier = tf.estimator.DNNClassifier(
feature_columns=feature_columns,
hidden_units=[1000],
n_classes=2)
如果想建構出一個以上的 hidden layer,只要在 hidden_units 的引數中,給予一個多元素的 python list。該 list 的長度會和 hidden layer 的層數相等,而每個 list 中的元素值,則代表了該索引值所代表的 hidden layer 的神經元數目。以下的原始碼範例,則是建構兩個 hidden layer,第一個 hidden layer 有 1000 個神經元,而第二個 hidden layer 則有 250 個神經元。
classifier = tf.estimator.DNNClassifier(
feature_columns=feature_columns,
hidden_units=[1000, 250],
n_classes=2)
在 hidden layer 的最上方,則是類似於 Logistic regression 的輸出,就是一層以 sigmoid function 作為 activaiton function 的輸出層。我們可以用 n_classes 的參數來決定輸出神經元的數目。
在下一篇中,我們將會比較 Feed Forward 類神經網路和純線性的 Logistic regression 分類器的 performance。